package com.xpalive.base.mapper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
import org.apache.ibatis.annotations.Param;

public interface MyBaseMapper<T> extends BaseMapper<T> {

    /**
     * <pre>
     * 根据 ID 删除
     *
     * @param id 主键ID
     * </pre>
     */
    int delPermanentById(Serializable id);

    /**
     * <pre>
     * 根据 columnMap 条件，删除记录
     *
     * @param columnMap 表字段 map 对象
     * </pre>
     */
    int delPermanentByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);

    /**
     * <pre>
     * 根据 entity 条件，删除记录
     *
     * @param queryWrapper 实体对象封装操作类（可以为 null,里面的 entity 用于生成 where 语句）
     * </pre>
     */
    int delPermanent(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

    /**
     * <pre>
     * 删除（根据ID 批量删除）
     *
     * @param idList 主键ID列表(不能为 null 以及 empty)
     * </pre>
     */
    int delPermanentBatchIds(
        @Param(Constants.COLLECTION) Collection<? extends Serializable> idList);

    /**
     * 根据 ID 修改,列都会更新
     *
     * @param entity 实体对象
     */
    int alwaysUpdateById(@Param(Constants.ENTITY) T entity);
}
